package com.lekang.system.mapper;

import com.lekang.system.domain.NursingItemPlanBinding;
import com.lekang.system.domain.NursingItem;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * <p>
 * 护理项目表与护理计划表中间表 Mapper 接口
 * </p>
 *
 * @author huangyuan
 * @since 2025-10-13
 */
public interface NursingItemPlanBindingMapper{

    /**
     * 根据护理计划ID查询绑定关系
     *
     * @param nursingPlanId 护理计划ID
     * @return 绑定关系列表
     */
    List<NursingItemPlanBinding> selectByNursingPlanId(Long nursingPlanId);

    /**
     * 新增护理项目计划绑定
     *
     * @param binding 绑定关系
     * @return 结果
     */
    int insertNursingItemPlanBinding(NursingItemPlanBinding binding);

    /**
     * 批量新增护理项目计划绑定
     *
     * @param bindings 绑定关系列表
     * @return 结果
     */
    int insertNursingItemPlanBindingBatch(List<NursingItemPlanBinding> bindings);

    /**
     * 根据护理计划ID删除绑定关系
     *
     * @param nursingPlanId 护理计划ID
     * @return 结果
     */
    int deleteByNursingPlanId(Long nursingPlanId);

    /**
     * 删除护理项目计划绑定
     *
     * @param id 绑定关系ID
     * @return 结果
     */
    int deleteNursingItemPlanBindingById(Long id);

    /**
     * 查询护理项目的价格（用于计算护理计划总价）
     * @param itemId 项目ID
     * @return NursingItem（只需price字段）
     */
    NursingItem selectItemPriceByItemId(Long itemId);
    
    /**
     * 根据护理计划ID查询护理项目绑定列表
     * @param planId 护理计划ID
     * @return 护理项目绑定列表
     */
    List<NursingItemPlanBinding> selectByPlanId(Long planId);
    
    /**
     * 根据护理项目ID更新状态（同步护理项目表的状态到中间表）
     * @param nursingItemId 护理项目ID
     * @param status 状态（"启用" 或 "禁用"）
     * @return 结果
     */
    int updateStatusByNursingItemId(@Param("nursingItemId") Long nursingItemId, @Param("status") String status);
}
